package cc.facesign.admin.service;

import cc.facesign.admin.bean.TblConf;
import cc.facesign.admin.bean.fv.confupload.ConfSimpleFv;
import cc.facesign.admin.bean.query.ConfQuery;
import cc.facesign.admin.bean.vo.ConfVo;
import cc.facesign.admin.bean.vo.UserSignVo;
import cc.facesign.admin.bean.vo.UserVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author testjava
 * @since 2022-05-06
 */
public interface TblConfService extends IService<TblConf> {

    /**
     * 根据会议id查询会议完整信息
     * @param confId 会议id
     * @return
     */
    ConfVo getInfoById(String confId);

    /**
     * 条件查询会议列表
     * @param query
     * @return
     */
    List<ConfVo> getListByQuery(ConfQuery query);

    /**
     * 根据部门id查旗下的所有会议信息（包括子部门）
     * @param deptId 部门id
     * @return
     */
    List<ConfVo> getChildListByDeptId(String deptId);


    /**
     * 获取会议中每个用户的签到情况
     * @param id 会议id
     * @return
     */
    List<UserSignVo> getUserSignListByConfId(String id);

    /**
     *  1、获取会议总人数、未签到人数
     *  2、获取未签到用户的详情信息
     * @param id 会议id
     * @return
     *         total: 总人数
     *         sign：签到人数
     *         no-sign：未签到人数
     *         sign-userList：已签到用户信息
     *         no-sign-userList：未签到用户信息
     */
    Map<String, Object> getConfSignInfoByConfId(String id);

    /**
     * 按部门id批量获取会议信息
     * @param strings 部门id集合
     * @return
     */
    List<ConfVo> getListByDeptIdBatch(List<String> strings);


    /**
     * 按会议id查会议中的全部用户信息
     * @param id
     * @return
     */
    List<UserVo> getUserListByConfId(String id);

    /**
     * 获取没有签到的用户id
     * @param id 会议id
     * @return
     */
    Set<String> getNoSignUserSetByConfId(String id);

    /**
     * 向会议中添加用户
     * @param confId 会议id
     * @param ids 用户id
     */
    void addUserByIds(String confId, List<String> ids);

    /**
     * 更新会议中的total值（总人参加）
     * @param confId 会议人数
     * @return
     */
    int updateTotal(String confId);

    /**
     * 给会议生成唯一六位数code
     * @return
     */
    String createCode();

    /**
     * 获取包括签到信息的用户信息
     * @param confId 会议id
     * @return
     */
    List<UserVo> getUserInfoContainsSignByConfId(String confId);

    /**
     * 根据code获取会议
     * @param code
     * @return
     */
    ConfVo getInfoByCode(String code);

    /**
     * 删除会议，顺便删除成员
     * @param id 会议id
     */
    void removeConfById(String id);

    /**
     * 删除会议中的用户
     * @param confId 会议id
     * @param ids 用户list
     */
    void removeUsers(String confId, List<String> ids);

    /**
     * 返回会议中一些用户的简单信息
     * @param confId 会议id
     * @param ids 用户ids
     * @return
     */
    ConfSimpleFv getSimpleInfo(String confId, List<String> ids);

    /**
     * 返回会议中全部用户的简单信息
     * @param confId 会议id
     * @return
     */
    ConfSimpleFv getSimpleInfoAll(String confId);

    /**
     * 结束会议
     */
    void stop(String confId);
}
